public class hell {
  public static void main(String[] args) {
    // 示例数组
    int[] arr = { 64, 34, 25, 12, 22, 11, 90 };

    System.out.println("原始数组:");
    printArray(arr);

    // 执行冒泡排序
    bubbleSort(arr);

    System.out.println("排序后数组:");
    printArray(arr);
  }

  // 冒泡排序实现
  /**
   * 冒泡排序算法实现
   * 时间复杂度：O(n²)
   * 空间复杂度：O(1)
   * 
   * @param arr 待排序的整数数组
   */
  static void bubbleSort(int[] arr) {
    int n = arr.length;
    // 外层循环控制排序轮数，每轮都会将当前最大的元素放到末尾
    for (int i = 0; i < n - 1; i++) {
      // 内层循环进行相邻元素比较和交换
      // 每轮结束后，末尾i个元素已经排好序，所以内层循环只需要比较到n-i-1
      for (int j = 0; j < n - i - 1; j++) {
        // 如果当前元素大于下一个元素，则交换它们的位置
        if (arr[j] > arr[j + 1]) {
          // 使用临时变量temp进行元素交换
          int temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
    }
  }

  // 打印数组的辅助方法
  static void printArray(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }
    System.out.println();
  }
}